package com.hmsg.health.utils.umeng.push;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONObject;

import com.alibaba.fastjson.JSON;
import com.hmsg.health.bean.Dto.UmengExtra;
import com.hmsg.health.utils.umeng.push.android.AndroidBroadcast;
import com.hmsg.health.utils.umeng.push.android.AndroidCustomizedcast;
import com.hmsg.health.utils.umeng.push.android.AndroidFilecast;
import com.hmsg.health.utils.umeng.push.android.AndroidGroupcast;
import com.hmsg.health.utils.umeng.push.android.AndroidUnicast;
import com.hmsg.health.utils.umeng.push.ios.IOSBroadcast;
import com.hmsg.health.utils.umeng.push.ios.IOSCustomizedcast;
import com.hmsg.health.utils.umeng.push.ios.IOSFilecast;
import com.hmsg.health.utils.umeng.push.ios.IOSGroupcast;
import com.hmsg.health.utils.umeng.push.ios.IOSUnicast;


public class Demo {
	
	private String appkey = "5f6d950d16d07a515475dfef";
	private String appMasterSecret = "h4osgrs4qcujh7dcdcfu1cbeglv1jxrj";
	
	private String iosappkey = "5f5724563739314483bdab8b";
	private String iosappMasterSecret = "bbcp6jkchbsun0dlypz17oicodfiicev";
	private String timestamp = null;
	private PushClient client = new PushClient();
	
	public void sendAndroidBroadcast() throws Exception {
		AndroidBroadcast broadcast = new AndroidBroadcast(appkey,appMasterSecret);
		broadcast.setTicker( "Android broadcast ticker");
		broadcast.setTitle(  "中文的title");
		broadcast.setText(   "Android broadcast text");
		broadcast.goAppAfterOpen();
		broadcast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
		// TODO Set 'production_mode' to 'false' if it's a test device. 
		// For how to register a test device, please see the developer doc.
		broadcast.setProductionMode();
		// Set customized fields
		broadcast.setExtraField("test", "helloworld");
		client.send(broadcast);
	}
	
	
	public void send(Integer type,String deviceToken,List<UmengExtra> extras,String ticker,String title,String text,JSONObject alert) throws Exception{
		if(deviceToken!=null&&deviceToken.length()==44){
			AndroidUnicast unicast = new AndroidUnicast(appkey,appMasterSecret);
			// TODO Set your device token
			unicast.setDeviceToken(deviceToken);
			unicast.setTicker(ticker);
			unicast.setTitle(title);
			unicast.setText(text);
			unicast.goAppAfterOpen();
			unicast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
			//unicast.setDisplayType(d);
			// TODO Set 'production_mode' to 'false' if it's a test device. 
			// For how to register a test device, please see the developer doc.
			unicast.setProductionMode();
			// Set customized fields
			
			if(extras!=null) {
				for(UmengExtra ue:extras){
					unicast.setExtraField(ue.getKey(),ue.getValue().toString());
				}
				
			}
			
			client.send(unicast);
		}else{
			IOSUnicast unicast = new IOSUnicast(iosappkey,iosappMasterSecret);
			
			// TODO Set your device token
			unicast.setDeviceToken(deviceToken);
			unicast.setAlert(alert);
			unicast.setBadge(0);
			unicast.setSound("default");
			unicast.setProductionMode(false);
			//unicast.setCustomizedField("", value)
			//unicast.setPayload("a");
			// TODO set 'production_mode' to 'true' if your app is under production mode
			//unicast.setProductionMode();
			// Set customized fields
			
			
			  JSONObject body = new JSONObject();
			  
			  if(extras!=null) {
					for(UmengExtra ue:extras){
						body.put(ue.getKey(), ue.getValue());
					}
					 unicast.setCustomizedField("extra", body);
					
				}
			
			 
			 
			System.out.println("-------"+unicast.getPostBody());
			client.send(unicast);
		}
	}
	public void sendAndroidUnicast() throws Exception {
		AndroidUnicast unicast = new AndroidUnicast(appkey,appMasterSecret);
		// TODO Set your device token
		unicast.setDeviceToken("AnnMzbU9sLgE498k1Ef8oCODHwviatH0w7-ATOuA8njH");
		unicast.setTicker( "Android unicast ticker");
		unicast.setTitle(  "中文的title");
		unicast.setText(   "Android unicast text");
		unicast.goAppAfterOpen();
		unicast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
		//unicast.setDisplayType(d);
		// TODO Set 'production_mode' to 'false' if it's a test device. 
		// For how to register a test device, please see the developer doc.
		unicast.setProductionMode();
		// Set customized fields
		unicast.setExtraField("test", "helloworld");
		client.send(unicast);
	}
	
	public void sendIOSUnicast() throws Exception {
		IOSUnicast unicast = new IOSUnicast(iosappkey,iosappMasterSecret);
		
		// TODO Set your device token
		unicast.setDeviceToken( "758d94f23ec6de41fa26c815c6753642ed58367a9ebc8b1b6038395b680688f1");
		unicast.setAlert("IOS 单播测试");
		unicast.setBadge(0);
		unicast.setSound("default");
		unicast.setProductionMode(false);
		//unicast.setPayload("a");
		// TODO set 'production_mode' to 'true' if your app is under production mode
		//unicast.setProductionMode();
		// Set customized fields
		
		
		  JSONObject body = new JSONObject(); 
		  body.put("title", "aaa");
		  body.put("text", "vvv");
		
		  unicast.setCustomizedField("body", body);
		 
		System.out.println("-------"+unicast.getPostBody());
		client.send(unicast);
	}
	
	public void sendAndroidUnicast(String device_token,String ticker,String title,String text,List<UmengExtra> extras) throws Exception {
		AndroidUnicast unicast = new AndroidUnicast(appkey,appMasterSecret);
		// TODO Set your device token
		unicast.setDeviceToken(device_token);
		unicast.setTicker(ticker);
		unicast.setTitle(title);
		unicast.setText(text);
		unicast.goAppAfterOpen();
		unicast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
		//unicast.setDisplayType(d);
		// TODO Set 'production_mode' to 'false' if it's a test device. 
		// For how to register a test device, please see the developer doc.
		unicast.setProductionMode();
		// Set customized fields
		
		if(extras!=null) {
			for(UmengExtra ue:extras){
				unicast.setExtraField(ue.getKey(),ue.getValue().toString());
			}
			
		}
		
		client.send(unicast);
	}
	
	public void sendAndroidGroupcast() throws Exception {
		AndroidGroupcast groupcast = new AndroidGroupcast(appkey,appMasterSecret);
		/*  TODO
		 *  Construct the filter condition:
		 *  "where": 
		 *	{
    	 *		"and": 
    	 *		[
      	 *			{"tag":"test"},
      	 *			{"tag":"Test"}
    	 *		]
		 *	}
		 */
		JSONObject filterJson = new JSONObject();
		JSONObject whereJson = new JSONObject();
		JSONArray tagArray = new JSONArray();
		JSONObject testTag = new JSONObject();
		JSONObject TestTag = new JSONObject();
		testTag.put("tag", "test");
		TestTag.put("tag", "Test");
		tagArray.put(testTag);
		tagArray.put(TestTag);
		whereJson.put("and", tagArray);
		filterJson.put("where", whereJson);
		System.out.println(filterJson.toString());
		
		groupcast.setFilter(filterJson);
		groupcast.setTicker( "Android groupcast ticker");
		groupcast.setTitle(  "中文的title");
		groupcast.setText(   "Android groupcast text");
		groupcast.goAppAfterOpen();
		groupcast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
		// TODO Set 'production_mode' to 'false' if it's a test device. 
		// For how to register a test device, please see the developer doc.
		groupcast.setProductionMode();
		client.send(groupcast);
	}
	
	public void sendAndroidCustomizedcast() throws Exception {
		AndroidCustomizedcast customizedcast = new AndroidCustomizedcast(appkey,appMasterSecret);
		// TODO Set your alias here, and use comma to split them if there are multiple alias.
		// And if you have many alias, you can also upload a file containing these alias, then 
		// use file_id to send customized notification.
		customizedcast.setAlias("alias", "alias_type");
		customizedcast.setTicker( "Android customizedcast ticker");
		customizedcast.setTitle(  "中文的title");
		customizedcast.setText(   "Android customizedcast text");
		customizedcast.goAppAfterOpen();
		customizedcast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
		// TODO Set 'production_mode' to 'false' if it's a test device. 
		// For how to register a test device, please see the developer doc.
		customizedcast.setProductionMode();
		client.send(customizedcast);
	}
	
	public void sendAndroidCustomizedcastFile() throws Exception {
		AndroidCustomizedcast customizedcast = new AndroidCustomizedcast(appkey,appMasterSecret);
		// TODO Set your alias here, and use comma to split them if there are multiple alias.
		// And if you have many alias, you can also upload a file containing these alias, then 
		// use file_id to send customized notification.
		String fileId = client.uploadContents(appkey,appMasterSecret,"aa"+"\n"+"bb"+"\n"+"alias");
		customizedcast.setFileId(fileId, "alias_type");
		customizedcast.setTicker( "Android customizedcast ticker");
		customizedcast.setTitle(  "中文的title");
		customizedcast.setText(   "Android customizedcast text");
		customizedcast.goAppAfterOpen();
		customizedcast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
		// TODO Set 'production_mode' to 'false' if it's a test device. 
		// For how to register a test device, please see the developer doc.
		customizedcast.setProductionMode();
		client.send(customizedcast);
	}
	
	public void sendAndroidFilecast() throws Exception {
		AndroidFilecast filecast = new AndroidFilecast(appkey,appMasterSecret);
		// TODO upload your device tokens, and use '\n' to split them if there are multiple tokens 
		String fileId = client.uploadContents(appkey,appMasterSecret,"aa"+"\n"+"bb");
		filecast.setFileId( fileId);
		filecast.setTicker( "Android filecast ticker");
		filecast.setTitle(  "中文的title");
		filecast.setText(   "Android filecast text");
		filecast.goAppAfterOpen();
		filecast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
		client.send(filecast);
	}
	
	public void sendIOSBroadcast() throws Exception {
		IOSBroadcast broadcast = new IOSBroadcast(appkey,appMasterSecret);

		broadcast.setAlert("IOS 广播测试");
		broadcast.setBadge( 0);
		broadcast.setSound( "default");
		// TODO set 'production_mode' to 'true' if your app is under production mode
		broadcast.setTestMode();
		// Set customized fields
		broadcast.setCustomizedField("test", "helloworld");
		client.send(broadcast);
	}
	

	
	public void sendIOSUnicast(String device_token,JSONObject alert,List<UmengExtra> extras) throws Exception {
		IOSUnicast unicast = new IOSUnicast(iosappkey,iosappMasterSecret);
		
		// TODO Set your device token
		unicast.setDeviceToken(device_token);
		unicast.setAlert(alert);
		unicast.setBadge(0);
		unicast.setSound("default");
		unicast.setProductionMode(false);
		//unicast.setCustomizedField("", value)
		//unicast.setPayload("a");
		// TODO set 'production_mode' to 'true' if your app is under production mode
		//unicast.setProductionMode();
		// Set customized fields
		
		
		  JSONObject body = new JSONObject();
		  
		  if(extras!=null) {
				for(UmengExtra ue:extras){
					body.put(ue.getKey(), ue.getValue());
				}
				 unicast.setCustomizedField("extra", body);
				
			}
		
		 
		 
		System.out.println("-------"+unicast.getPostBody());
		client.send(unicast);
	}
	
	public void sendIOSGroupcast() throws Exception {
		IOSGroupcast groupcast = new IOSGroupcast(appkey,appMasterSecret);
		/*  TODO
		 *  Construct the filter condition:
		 *  "where": 
		 *	{
    	 *		"and": 
    	 *		[
      	 *			{"tag":"iostest"}
    	 *		]
		 *	}
		 */
		JSONObject filterJson = new JSONObject();
		JSONObject whereJson = new JSONObject();
		JSONArray tagArray = new JSONArray();
		JSONObject testTag = new JSONObject();
		testTag.put("tag", "iostest");
		tagArray.put(testTag);
		whereJson.put("and", tagArray);
		filterJson.put("where", whereJson);
		System.out.println(filterJson.toString());
		
		// Set filter condition into rootJson
		groupcast.setFilter(filterJson);
		groupcast.setAlert("IOS 组播测试");
		groupcast.setBadge( 0);
		groupcast.setSound( "default");
		// TODO set 'production_mode' to 'true' if your app is under production mode
		groupcast.setTestMode();
		client.send(groupcast);
	}
	
	public void sendIOSCustomizedcast() throws Exception {
		IOSCustomizedcast customizedcast = new IOSCustomizedcast(appkey,appMasterSecret);
		// TODO Set your alias and alias_type here, and use comma to split them if there are multiple alias.
		// And if you have many alias, you can also upload a file containing these alias, then 
		// use file_id to send customized notification.
		customizedcast.setAlias("alias", "alias_type");
		customizedcast.setAlert("IOS 个性化测试");
		customizedcast.setBadge( 0);
		customizedcast.setSound( "default");
		// TODO set 'production_mode' to 'true' if your app is under production mode
		customizedcast.setTestMode();
		client.send(customizedcast);
	}
	
	public void sendIOSFilecast() throws Exception {
		IOSFilecast filecast = new IOSFilecast(appkey,appMasterSecret);
		// TODO upload your device tokens, and use '\n' to split them if there are multiple tokens 
		String fileId = client.uploadContents(appkey,appMasterSecret,"aa"+"\n"+"bb");
		filecast.setFileId( fileId);
		filecast.setAlert("IOS 文件播测试");
		filecast.setBadge( 0);
		filecast.setSound( "default");
		// TODO set 'production_mode' to 'true' if your app is under production mode
		filecast.setTestMode();
		client.send(filecast);
	}
	
	public static void main(String[] args) {
		
		Demo demo = new Demo();
		try {
			System.out.println();
			String a = "758d94f23ec6de41fa26c815c6753642ed58367a9ebc8b1b6038395b680688f1";
			System.out.println(a.length());
			demo.sendIOSUnicast();
			//demo.sendAndroidUnicast();
//			demo.sendIOSUnicast();
			/* TODO these methods are all available, just fill in some fields and do the test
			 * demo.sendAndroidCustomizedcastFile();
			 * demo.sendAndroidBroadcast();
			 * demo.sendAndroidGroupcast();
			 * demo.sendAndroidCustomizedcast();
			 * demo.sendAndroidFilecast();
			 * 
			 * demo.sendIOSBroadcast();
			 *demo.sendIOSUnicast();
			 * demo.sendIOSGroupcast();
			 * demo.sendIOSCustomizedcast();
			 * demo.sendIOSFilecast();
			 */
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
	

}
